﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dados;
using System.ComponentModel;

namespace Negocios
{
        [DataObject]
        public class VideoBLL
        {
            [DataObjectMethodAttribute(DataObjectMethodType.Insert, true)]
            public bool Insere(Video a)
            {
                try
                {
                    return VideoDAL.Insere(a.Nome,a.Localizacao,a.Genero.Codigo,a.Autor.Codigo,a.Formato.Codigo,a.Especificacao.Codigo,a.Software.Codigo,a.Usuario.Id);
                }
                catch (Exception ex)
                {
                    throw new Exception("Erro ao inserir entidade");
                }
            }

            [DataObjectMethodAttribute(DataObjectMethodType.Select, true)]
            public Video Consultar(int codigo)
            {
                DSMPTUDO.T_VIDEODataTable VideoDT = VideoDAL.ConsultaPorCodigo(codigo);

                Genero g = new Genero(VideoDT[0].nr_genero);
                Autor a = new Autor(VideoDT[0].nr_autor);
                Formato f = new Formato(VideoDT[0].nr_formato);
                Especificacao e = new Especificacao(VideoDT[0].nr_especificacao);
                SoftwareDeReproducao s = new SoftwareDeReproducao(VideoDT[0].nr_software);
                Usuario u = new Usuario(VideoDT[0].tx_usuario);

                if (VideoDT.Count == 1)
                    return (new Video(VideoDT[0].nr_codigo,VideoDT[0].tx_nome, VideoDT[0].tx_localizacao,g,a,f,e,s,u));
                else
                    return null;
            }

            [DataObjectMethodAttribute(DataObjectMethodType.Update, true)]
            public bool Atualizar(Video a)
            {
                try
                {
                    return VideoDAL.Atualiza(a.Codigo,a.Nome, a.Localizacao, a.Genero.Codigo, a.Autor.Codigo, a.Formato.Codigo, a.Especificacao.Codigo, a.Software.Codigo,a.Usuario.Id);
                }
                catch (Exception ex)
                {
                    throw new Exception("Erro ao atualizar Entidade" + a.Nome);
                }

            }
            [DataObjectMethodAttribute(DataObjectMethodType.Delete, true)]
            public bool Excluir(Video a)
            {
                try
                {
                    return VideoDAL.Remove(a.Codigo);
        }
                catch (Exception ex)
                {
                    throw new Exception("Erro ao Remover Entidade" + a.Nome);
                }

            }
            [DataObjectMethodAttribute(DataObjectMethodType.Select, true)]
            public static List<Video> ConsultaTodos()
            {
                List<Video> Lista = new List<Video>();

                DSMPTUDO.T_VIDEODataTable VideoDT = VideoDAL.ConsultaTodos();

                
                for (int i = 0; i < VideoDT.Count; i++)
                {
                    Genero g = new Genero(VideoDT[i].nr_genero);
                    Autor a = new Autor(VideoDT[i].nr_autor);
                    Formato f = new Formato(VideoDT[i].nr_formato);
                    Especificacao e = new Especificacao(VideoDT[i].nr_especificacao);
                    SoftwareDeReproducao s = new SoftwareDeReproducao(VideoDT[i].nr_software);
                    Usuario u = new Usuario(VideoDT[i].tx_usuario);
                    Video v = new Video(VideoDT[i].nr_codigo,VideoDT[i].tx_nome, VideoDT[i].tx_localizacao,g,a,f,e,s,u);
                    Lista.Add(v);
                }
                return Lista;
            }
            [DataObjectMethodAttribute(DataObjectMethodType.Select, true)]
            public List<Video> ConsultarParametros(string nome, int genero, int autor, int formato, int especificacao)
            {
                List<Video> Lista = new List<Video>();
                DSMPTUDO.T_VIDEODataTable VideoDT = VideoDAL.ConsultaPorParametro(nome, genero, autor, formato, especificacao);     
                
                if (VideoDT.Count > 0)
                {
                    for (int i = 0; i < VideoDT.Count; i++)
                    {
                        Genero g = (new GeneroBLL()).Consultar(VideoDT[i].nr_genero);
                        Autor a = (new AutorBLL()).Consulta(VideoDT[i].nr_autor);
                        Formato f = (new FormatoBLL()).Consulta(VideoDT[i].nr_formato);
                        Especificacao e = (new EspecificacaoBLL()).Consultar(VideoDT[i].nr_especificacao);
                        SoftwareDeReproducao sr = (new Software_De_ReproducaoBLL()).Consulta(VideoDT[i].nr_software);
                        Usuario u = (new UsuarioBLL()).Consulta(VideoDT[i].tx_usuario);

                        Video v = new Video(VideoDT[i].nr_codigo, VideoDT[i].tx_nome, VideoDT[i].tx_localizacao, g, a, f, e, sr, u);
                        Lista.Add(v);
                    }
                    return Lista;
                }
                else
                    return null;
            }
            
            [DataObjectMethodAttribute(DataObjectMethodType.Select, true)]
            public static List<Video> ConsultarPorUsuario(string usuario)
            {
                List<Video> Lista = new List<Video>();
                DSMPTUDO.T_VIDEODataTable VideoDT = VideoDAL.ConsultaPorUsuario(usuario);
                    for (int i = 0; i < VideoDT.Count; i++)
                    {
                        Genero g = (new GeneroBLL()).Consultar(VideoDT[i].nr_genero);
                        Autor a = (new AutorBLL()).Consulta(VideoDT[i].nr_autor);
                        Formato f = (new FormatoBLL()).Consulta(VideoDT[i].nr_formato);
                        Especificacao e = (new EspecificacaoBLL()).Consultar(VideoDT[i].nr_especificacao);
                        SoftwareDeReproducao sr = (new Software_De_ReproducaoBLL()).Consulta(VideoDT[i].nr_software);
                        Usuario u = (new UsuarioBLL()).Consulta(VideoDT[i].tx_usuario);

                        Video v = new Video(VideoDT[i].nr_codigo, VideoDT[i].tx_nome, VideoDT[i].tx_localizacao, g, a, f, e, sr, u);
                        Lista.Add(v);
                    }
                   return Lista;
            }
        }
    }
